Session Fixation একটি নিরাপত্তা আক্রমণ যেখানে আক্রমণকারী ব্যবহারকারীর সেশনে প্রবেশ করতে পারে এবং সেশন আইডি চুরি করে অননুমোদিত অ্যাক্সেস পেতে পারে। Spring Security তে, Session Fixation Protection এভাবে কনফিগার করা যায় যে, যখন ব্যবহারকারী লগইন করেন, তখন সেশন আইডি পরিবর্তন হয়ে যায়, যাতে আক্রমণকারী পূর্বের সেশন আইডি ব্যবহার করে অ্যাক্সেস না পায়।
Spring Security Session Fixation Protection এই ধরনের আক্রমণ থেকে রক্ষা করতে সাহায্য করে। এটি সেশনের স্থিতিশীলতা বজায় রাখতে session fixation protection কনফিগার করে, যেখানে সেশন আইডি পরিবর্তন করা হয় (migrate or new session creation) লগইন করার পর।
Session Fixation Protection কনফিগারেশন
Spring Security তে, HttpSecurity এর মাধ্যমে সেশন ফিক্সেশন প্রোটেকশন কনফিগার করা যায়। এটি sessionManagement() পদ্ধতির মাধ্যমে করা হয়।
১. Basic Session Fixation Protection কনফিগারেশন
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests()
.anyRequest().authenticated() // All requests must be authenticated
.and()
.sessionManagement()
.sessionFixation().migrateSession() // Protect against session fixation
.and()
.formLogin()
.permitAll(); // Allow login for everyone
return http.build();
}
}
এখানে, .sessionFixation().migrateSession() মেথডটি session fixation আক্রমণ থেকে রক্ষা করতে সেশন আইডি পরিবর্তন করে যখন ব্যবহারকারী সফলভাবে লগইন করেন।
২. আরও শক্তিশালী Session Fixation Protection
Spring Security তে, আপনি sessionFixation() কনফিগারেশনকে "newSession" এ সেট করতে পারেন, যা আরও শক্তিশালী এবং নতুন সেশন তৈরি করে লগইন করার পর।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests()
.anyRequest().authenticated() // All requests must be authenticated
.and()
.sessionManagement()
.sessionFixation().newSession() // Force creation of a new session upon login
.and()
.formLogin()
.permitAll(); // Allow login for everyone
return http.build();
}
}
এখানে .sessionFixation().newSession() পদ্ধতি ব্যবহার করা হয়েছে, যা সেশন আইডি পরিবর্তন করে এবং একটি নতুন সেশন তৈরি করে লগইন করার পর। এটি session fixation আক্রমণ প্রতিরোধের জন্য সবচেয়ে শক্তিশালী পদ্ধতি।
Session Management কনফিগারেশন অপশনস
Spring Security তে sessionManagement() পদ্ধতির মাধ্যমে বিভিন্ন ধরনের সেশন কনফিগারেশন করা যায়:
sessionFixation().migrateSession(): লগইন করার পর সেশন আইডি পরিবর্তন করে (মাইগ্রেট) কিন্তু পুরানো সেশন আইডি ব্যবহার করতে দেয় না। এটি অধিকাংশ সাধারণ ব্যবহার।sessionFixation().newSession(): লগইন করার পর সম্পূর্ণ নতুন সেশন তৈরি করে এবং পুরানো সেশনটিকে বাতিল করে দেয়। এটি নিরাপত্তার জন্য সর্বোত্তম এবং অধিক শক্তিশালী।maximumSessions(int maxSessions): একই সময়ে একাধিক সেশন তৈরি হওয়া আটকানোর জন্য সেশন সংখ্যা সীমাবদ্ধ করা।http.sessionManagement() .maximumSessions(1) .maxSessionsPreventsLogin(true); // Prevent new login when max sessions reachedsessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED): সেশন তৈরির নীতি নিয়ন্ত্রণ করে।- IF_REQUIRED: শুধুমাত্র যখন প্রয়োজন, তখন সেশন তৈরি করা হবে (ডিফল্ট পদ্ধতি)।
- ALWAYS: প্রতিটি অনুরোধের জন্য সেশন তৈরি করবে।
- NEVER: কখনও সেশন তৈরি করবে না।
- STATELESS: পুরোপুরি Stateless অ্যাপ্লিকেশন হলে সেশন তৈরি হবে না।
Session Fixation Protection কেন প্রয়োজন?
- Security: Session fixation আক্রমণ থেকে অ্যাপ্লিকেশনকে সুরক্ষা প্রদান।
- User Authentication: ব্যবহারকারীর লগইন প্রক্রিয়া সুরক্ষিত রাখা।
- Prevent Session Hijacking: আক্রমণকারীদের দ্বারা সেশন চুরি করা এবং ব্যবহার করা বন্ধ করা।
উপসংহার
Spring Security তে Session Fixation Protection কনফিগার করে আপনি আপনার অ্যাপ্লিকেশনকে সেশন ফিক্সেশন আক্রমণ থেকে রক্ষা করতে পারেন। .sessionFixation().migrateSession() বা .sessionFixation().newSession() ব্যবহার করে সেশন আইডি নিরাপদভাবে পরিবর্তন করা সম্ভব। এটি আপনার অ্যাপ্লিকেশনের নিরাপত্তা উন্নত করতে সহায়ক।
আপনার প্রয়োজন অনুযায়ী আরও কাস্টমাইজেশন বা উদাহরণ চাইলে জানাতে পারেন!
Read more